1. Acesse ou adicione atributos de solicitação/sessão/aplicativo
escopo de string pública() lança exceção{
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Escopo da aplicação");//Coloque o aplicativo em ServletContext
ctx.getSession().put("ses", "intervalo de sessão");//Coloque ses na sessão
ctx.put("req", "request range"); //Coloque req na solicitação
retornar "escopo";
}
JSP:
<corpo>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</body>
2. Obtenha o objeto HttpServletRequest/HttpSession/ServletContext/HttpServletResponse
Método um, obtido diretamente por meio da classe ServletActionContext:
string pública rsa() lança exceção{
Solicitação HttpServletRequest = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
request.getSession()
Resposta HttpServletResponse = ServletActionContext.getResponse();
retornar "escopo";
}
Método dois, implemente a interface especificada e injete-a quando a estrutura do struts estiver em execução:
classe pública HelloWorldAction implementa ServletRequestAware, ServletResponseAware, ServletContextAware{
solicitação HttpServletRequest privada;
private ServletContext servletContext;
resposta privada HttpServletResponse;
public void setServletRequest(requisição HttpServletRequest) {
this.request=req;
}
public void setServletResponse(HttpServletResponse res) {
this.response=res;
}
public void setServletContext(ServletContext ser) {
this.servletContext=ser;
}
}
3. Carregamento de arquivo
Etapa um: adicione commons-fileupload-1.2.1.jar e commons-io-1.3.2.jar em WEB-INF/lib. Ambos os arquivos podem ser baixados em http://commons.apache.org/.
Passo 2: Defina o enctype da tabela do formulário como: "multipart/form-data", como segue:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="arquivo" nome="uploadImage">
</form>
Etapa 3: adicione os seguintes atributos na classe Action. A parte vermelha do atributo corresponde ao nome do campo do arquivo no formulário:
classe pública HelloWorldAction{
private File uploadImage; //Obtém o arquivo enviado
private String uploadImageContentType; //Obtém o tipo de arquivo
private String uploadImageFileName; //Obtém o nome do arquivo
//Os métodos getter/setter das propriedades são omitidos aqui.
public String upload() lança exceção{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
Arquivo arquivo = novo arquivo(caminhoreal);
if(!file.exists()) arquivo.mkdirs();
FileUtils.copyFile(uploadImage, novo arquivo(arquivo, uploadImageFileName));
retornar "sucesso";
}
}
4. Upload de vários arquivos
Etapa um: adicione commons-fileupload-1.2.1.jar e commons-io-1.3.2.jar em WEB-INF/lib. Ambos os arquivos podem ser baixados em http://commons.apache.org/.
Passo 2: Defina o enctype da tabela do formulário como: "multipart/form-data", como segue:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadImages">
<input type="file" name="uploadImages">
</form>
Etapa 3: adicione os seguintes atributos na classe Action. A parte vermelha do atributo corresponde ao nome do campo do arquivo no formulário:
classe pública HelloWorldAction{
private File[] uploadImages; //Obtém o arquivo enviado
private String[] uploadImagesContentType; //Obtém o tipo de arquivo
private String[] uploadImagesFileName; //Obtém o nome do arquivo
//Os métodos getter/setter das propriedades são omitidos aqui.
public String upload() lança exceção{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
Arquivo arquivo = novo arquivo(caminhoreal);
if(!file.exists()) arquivo.mkdirs();
for(int i=0 ;i<uploadImages.length; i++){ Arquivo uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, novo arquivo(arquivo, uploadImagesFileName[i]));
}
retornar "sucesso";
}}
5. Interceptador personalizado
Para customizar o interceptor, você precisa implementar a interface com.opensymphony.xwork2.interceptor.Interceptor:
classe pública PermissionInterceptor implementa Interceptor {
privado estático final longo serialVersionUID = -5178310397732210602L;
public void destruir() {
}
public void inicialização() {
}
interceptação de string pública (invocação de ActionInvocation) lança exceção {
System.out.println("Insira o interceptador");
if(usuário existe na sessão){
String resultado = invocation.invoke();
}outro{
retornar "logon";
}
//System.out.println("Valor de retorno:"+ resultado);
//retorna o resultado;
}
}
<nome do pacote="csdn" namespace="/test" extends="struts-default">
<interceptadores>
<nome do interceptador = "permissão" />
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="permissão" />
</interceptor-stack>
</interceptores>
<action name="helloworld_*" método="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
<interceptor-ref name="permissionStack"/>
</action>
</pacote>
Como as funções do struts2, como upload de arquivos, verificação de dados e encapsulamento de parâmetros de solicitação em ações, são todas implementadas pelo interceptor no defaultStack padrão do sistema, o interceptor que definimos precisa fazer referência ao defaultStack padrão do sistema para que o aplicativo possa usar o struts2. recursos fornecidos pela estrutura.
Se quiser que todas as ações do pacote usem um interceptor customizado, você pode definir o interceptor como o interceptor padrão por meio de <default-interceptor-ref name="permissionStack"/>. Nota: Somente um interceptor padrão pode ser especificado por pacote. Além disso, uma vez especificado explicitamente um interceptador para uma ação no pacote, o interceptor padrão não funcionará.
6. Verificação de entrada
No struts2, podemos verificar todos os métodos de ação ou verificar métodos de ação especificados.
Struts2 fornece dois métodos de implementação para verificação de entrada:
1. Implementado escrevendo código manualmente.
2. Implementado com base na configuração XML.
7. Escreva o código manualmente para verificar a entrada de todos os métodos na ação
Ao substituir o método validar(), o método validar() verificará todos os métodos na ação que possuem a mesma assinatura do método executar. Quando uma determinada verificação de dados falha, devemos chamar o método addFieldError() para adicionar informações de falha de verificação aos fieldErrors do sistema (para usar o método addFieldError(), a ação pode herdar ActionSupport se os fieldErrors do sistema contiverem informações de falha). struts2 irá A solicitação é encaminhada para o resultado denominado input. As informações de falha podem ser exibidas através de <s:fielderror/> na visualização de entrada.
Validar() exemplo de uso:
public void validar() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("nome de usuário", "O número do celular não pode estar vazio");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "O formato do número do celular está incorreto");
}
}
Após a verificação falhar, a solicitação é encaminhada para a visualização de entrada:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Use <s:fielderror/> na página addUser.jsp para exibir informações de falha.
Implementado através do método validXxx(), validXxx() verificará apenas o método denominado Xxx na ação. A primeira letra de Xxx deve ser maiúscula. Quando uma determinada verificação de dados falha, devemos chamar o método addFieldError() para adicionar informações de falha de verificação aos fieldErrors do sistema (para usar o método addFieldError(), a ação pode herdar ActionSupport se os fieldErrors do sistema contiverem informações de falha). struts2 irá A solicitação é encaminhada para o resultado denominado input. As informações de falha podem ser exibidas através de <s:fielderror/> na visualização de entrada.
Exemplo de uso do método validXxx():
public String add() lança Exception{ return "sucesso";}
public void validarAdd(){
if(username==null && "".equals(username.trim())) this.addFieldError("nome de usuário", "Nome de usuário não pode estar vazio");
}
Após a verificação falhar, a solicitação é encaminhada para a visualização de entrada:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Use <s:fielderror/> na página addUser.jsp para exibir informações de falha.
8. Processo de verificação de entrada
1. O conversor de tipo realiza a conversão de tipo nos parâmetros de solicitação e atribui o valor convertido ao atributo na ação.
2. Se ocorrer uma exceção durante a conversão do tipo, o sistema salvará as informações da exceção no ActionContext e o interceptor ConversionError adicionará as informações da exceção ao fieldErrors. Independentemente de ocorrer uma exceção durante a conversão de tipo, a etapa 3 será inserida.
3. O sistema primeiro chama o método validXxx() na ação por meio da tecnologia de reflexão, onde Xxx é o nome do método.
4. Em seguida, chame o método activate() na ação.
5. Após as 4 etapas acima, se houver informações de erro em fieldErrors no sistema (ou seja, o tamanho da coleção que armazena informações de erro for maior que 0), o sistema encaminhará automaticamente a solicitação para a visualização denominada input. Se não houver informações de erro no campoErros no sistema, o sistema executará o método de processamento na ação.
9. Implementar verificação de entrada para todos os métodos de ação baseados no método de configuração XML
Ao usar o método de configuração baseado em XML para implementar a verificação de entrada, a ação também precisa herdar ActionSupport e fornecer um arquivo de verificação. O arquivo de verificação e a classe de ação são colocados no mesmo pacote. O formato de nomenclatura do arquivo é: ActionClassName-validation. xml, onde ActionClassName é o nome simples da classe de ação e -validation é um método de escrita fixo. Se a classe Action for cn.csdn.UserAction, o nome do arquivo deverá ser: UserAction-validation.xml. A seguir está um modelo para o arquivo de verificação:
<?xml versão="1.0" codificação="UTF-8"?>
<!Validadores DOCTYPE PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validadores>
<nome do campo="nome de usuário">
<field-validator type="requiredstring">
<param name="trim">verdadeiro</param>
<message>O nome de usuário não pode ficar vazio!</message>
</field-validator>
</campo>
</validadores>
<field> especifica os atributos a serem verificados na ação e <field-validator> especifica o validador. A string necessária do validador especificada acima é fornecida pelo sistema. o validador pode ser encontrado em default.xml em com.opensymphony.xwork2.validator.validators em xwork-2.x.jar.
<message> é a mensagem de prompt após a falha da verificação. Se a internacionalização for necessária, você poderá especificar o atributo key para a mensagem e o valor de key será a chave no arquivo de recursos.
Neste arquivo de verificação, o atributo nome de usuário do tipo string na ação é verificado. Primeiro é necessário chamar o método trim() para remover espaços e, em seguida, determinar se o nome de usuário está vazio.
Ao gravar o arquivo de verificação, a mensagem de ajuda não pode aparecer. Ao gravar o arquivo de verificação ActionClassName-validation.xml, se a mensagem de ajuda não aparecer, você pode resolver o problema da seguinte forma:
windowwos->preferências->myeclipse->arquivos e editores->xml->xmlcatalog
Clique em "adicionar", selecione "Sistema de arquivos" no local da janela que aparece, selecione xwork-validator-1.0.3.dtd no diretório src/java do diretório de descompactação xwork-2.1.2 e retorne ao janela de configuração Não se apresse em fechar a janela, você deve alterar o tipo de chave na janela para URI. Chave alterada para http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd